package org.common.utils.fury;

import io.fury.Fury;

/**
 * Fury 工具类
 * @author zhouzhibing
 * @date 2025/11/21 18:37
 */
public class FuryTool {

    /**
     * Fury对象池
     */
    private static final FuryPool FURY_POOL = new FuryPool();

    /**
     * 获取Fury实例
     * @return Fury实例
     */
    private static Fury getFury() {
        return FURY_POOL.get();
    }

    /**
     * 归还Fury实例
     */
    private static void returnFury() {
        FURY_POOL.returnEntry();
    }

    /**
     * 序列化对象
     * @param obj 要序列化的对象
     * @return 序列化后的字节数组
     */
    public static byte[] serialize(Object obj) {
        try {
            return getFury().serialize(obj);
        } finally {
            returnFury();
        }
    }

    /**
     * 反序列化对象
     * @param data 要反序列化的字节数组
     * @return 反序列化后的对象
     * @param <T> 泛型
     */
    public static <T> T deserialize(byte[] data) {
        try {
            return (T) getFury().deserialize(data);
        } finally {
            returnFury();
        }
    }

}
